Matlab 基本绘图

matlab基本绘图指令

plot 函数的基本使用语法格式为:

绘制一条曲线:plot(xdata, ydata, ’color_linestyle_marker’)
绘制多条曲线:plot(xdata1, ydata1, ’clm1’, xdata2, ydata2, ’clm2’, …)
若在绘制曲线的时候没有指定曲线的色彩、线型和标识符,则MATLAB 使用默认的设置。

1
2
3
>> x = 0:pi/1000:2*pi;
>> y = sin(2*x+pi/4);
>> plot(x,y)

设置曲线的样式属性

MATLAB 预先设置了不同的曲线样式属性值,分别控制曲线的色彩、线型和标识符。

线型 说明 标记符 说明 颜色 说明 示例(md怎么把格子拉长一点呢)
- 实线(默认) + 加号符 r 红色
双划线 o 空心圆 g 绿色
: 虚线 * 星号 b 蓝色
-. 点画线 . 实心圆 c 青绿色
x 叉号符 m 洋红色
s 正方形 y 黄色
d 菱形 k 黑色
^ 上三角形 w 白色
v 下三角形
< 左三角形
> 右三角形
p 五角星
h 六边形

LineSpec中设置曲线线型、标识符和颜色三项属性时,控制符的顺序不受限制并可以省略或者部分省略。也就是说

1
'r-.*'; '-.r*'; '*-.r'

等形式是等效的,都表示使用红色点划线连接各个节点,各节点使用 * 标识。
在同时绘制多条曲线时,如果没有指定曲线属性,plot按顺序循环使用当前坐标系中ColorOrder和LineStyleOrder两个属性。
默认情况,MATLAB在每次调用plot函数时将ColorOrder和LineStyleOrder自动重置为DefaultAxesColorOrder和DefaultAxesLineStyleOrder。Default属性我们可以自定义,有效期至MATLAB关闭,Matlab下次启动时将Default属性重置为厂家设置(Factory)。

1
set(0,'DefaultAxesColorOrder',’r|g|b|k’, 'DefaultAxesLineStyleOrder','-|-.|--|:')

使用hold all命令可以阻止调用plot函数时自动重置ColorOrder和LineStyleOrder属性,而是循环使用。注意hold on只是使多次绘制的图形叠加(相当于NextPlot),但不能阻止属性重置。

MATLAB 图形对象都有自己的属性,通过修改属性就可以修改图形曲线的外观,这也是句柄图形和图形用户界面操作图形对象的方法。绘制曲线时,可以通过修改下列属性完成对曲线细节的设置:

  • LineWidth:曲线的宽度,单位为point
  • MarkerEdgeColor:曲线时标边缘的色彩
  • MarkerFaceColor:填充曲线时标的色彩
  • MarkerSize:曲线时标的大小,单位为point

注意:四个属性是针对当前坐标系中所有曲线。

MATLAB 子图

subplot 函数把现有的图形窗体分割成指定行数和列数的区域,在每个区域内都可以包含一个绘图轴,利用该函数选择不同的绘图区,然后所有的绘图操作都将结果输出到指定的绘图区中。
subplot 函数的基本用法如下:

1
subplot(m,n,p)

其中,m 和n 为将图形窗体分割成的行数和列数,p 为选定的窗体区域的序号,以行元素优先顺序排列。

控制绘图区域

所谓MATLAB 的绘图区域是指图形窗体中的轴(Axes),需要牢记一点,所有MATLAB的图形对象都是绘制在轴的上面,所以控制绘图的区域也就是控制轴的显示区域。

坐标轴

axis 函数可以修改图形窗体轴的范围,它的基本语法格式如下:

1
axis([xmin xmax ymin ymax])

其中,xmin 和 xmax 决定 X 轴的显示范围,ymin 和 ymax 决定 Y 轴的显示范围。

坐标线间隔

绘制曲线的轴还需要设置坐标线之间的间隔(Ticks),在默认的情况下,MATLAB 按照绘制数据的范围设置坐标线的间隔,这种间隔的设置是自动完成的,用户也可以根据自己的需要设置这些间隔,具体的方法是通过设置轴的XTick 或者YTick 属性实现对X 轴或者Y 轴的坐标间隔设置。

1
set(gca,’XTick’, - pi:pi/4:pi)

注意:set 函数和get 函数是用来设置/获取MATLAB 图形对象属性的常用函数。本例子使用gca 函数来获取当前的轴图形对象的句柄。

修改轴的XTickLabel 或者YTickLabel 属性。

1
2
label = {’- pi’,’’,’- pi/2’,’’,’0’,’’,’pi/2’,’’,’pi’}
set(gca,’XTickLabel’,label)

增加文本信息

MATLAB 图形窗体的文本信息主要包括图形标题、文本注释、轴标签和图例等。
为图形窗体增加这些文本信息一般有多种途径,或者通过菜单命令,或者通过属性编辑器,或者使用MATLAB 提供的函数。MATLAB 的图形窗体Insert 菜单下包含多个菜单命令可以用来添加这些格式化的文本信息,而通过MATLAB 图形编辑器,配合不同对象的属性编辑器也可以完成添加格式化文本信息的工作。不过这些方法都没有利用函数编写程序
简便、灵活。

添加标题

添加图形的标题需要使用title 函数,该函数的基本用法为:

1
title(’string’)

其中,字符串string 为图形窗体的标题,该标题将被自动地设置在轴的正中顶部。

添加图例(legend)

添加轴的图例需要使用函数legend,该函数的基本语法为:

1
legend(’string1’, ’string2'...)

其中,字符串string1、string2 为图例的说明性文本,MATLAB 将自动地按照绘制在轴上的曲线的绘制次序选择相应的文本作为图例。

添加坐标轴标签(label)

一般地,可以使用xlabel、ylabel 和zlabel 函数分别为图形窗体的X 轴、Y 轴和Z 轴添加轴标签。以X 轴为例,这三个函数的基本使用语法如下:

1
xlabel(’string’)

其中,string 就是坐标轴的标签。坐标轴的标签自动与坐标轴居中对齐

添加文本注释(text)

创建文本注释的时候可以将文本注释首先保存在元胞数组中,然后使用text 函数完成向图形窗体添加文本注释的工作。text 函数的基本语法为:

1
text(x, y, ’string’)

其中,x 和y 是文本注释添加的坐标值,该坐标值使用当前轴系的单位设置,这个坐标也就是文本起始点的坐标。

格式化文本标注

创建格式化文本标注的方法:
文本标注的字体属性可以在创建文本标注的时候进行设置,其中有关字体本身的属性包括:

  • FontName:字体名称,例如Courier、隶书等。
  • FontSize:字体大小,整数值,默认为10 points。
  • FontWeight:设置字体的加粗属性。
  • FontUnits:字体大小的度量单位,默认为point。

特殊字符标注

利用 LaTeX 字符集 MATLAB 文本注释 的定义,就可以在MATLAB 的图形文本标注中使用希腊字符、数学符号或者上标和下标字体等。
在MATLAB 图形窗体的所有文本标注中都可以使用这些特殊的文本,比如在标题、坐标轴标签、文本注释中,使用特殊文本时一定要注意不要忘记“\”符号,否则MATLAB就会按照普通文本处理这些字符。除了直接使用附录中的LaTeX 字符集外,还可以用下面的标识符组合完成更丰富的字体标注。

  • \bf:加粗字体。
  • \it:斜体字。
  • \sl:斜体字(很少使用)。
  • \rm:正常字体。
  • \fontname{fontname}:定义使用特殊的字体名称。
  • \fontsize{fontsize}:定义使用特殊的字体大小,单位为FontUnits。

设置字体的大小或者名称将直接影响接在定义符后面的文本内容,直到下一个字体定
义符出现。
进行上标或者下标文本的注释需要使用“_”和“^”字符。进行上标标注的方法如下:

  • ^{superstring} 上标
  • _{substring} 下标

特殊图形函数

特殊坐标轴系

  • loglog:两个坐标轴都使用对数刻度。
  • semilogx:x 轴用对数刻度,y 轴用普通线性刻度。
  • semilogy:y 轴用对数刻度,x 轴用普通线性刻度。

绘制特殊图形

1.条状图和面积图

  • bar:绘制二维条状图,将m 行n 列的矩阵绘制成m 组,每组n 个垂直条(bar)。
  • barh:绘制二维水平条状图,将m 行n 列的矩阵绘制成m 组,每组n 个水平条(bar)。
  • bar3:绘制三维条状图,将m 行n 列的矩阵绘制成m 组,每组n 个垂直条(bar)。
  • barh3:绘制三维水平条状图,将m 行n 列的矩阵绘制成m 组,每组n 个水平条(bar)。
  • area:绘制面积图,将向量数据绘制成面积图。

2.饼图

  • pie
  • pie3

3.柱状图(直方图)

柱状图(直方图)用来显示数据的分布情况,比如显示一组数据的概率分布情况。柱状图可以绘制在普通的直角坐标下,也可以绘制在极坐标下,使用的函数分别为hist 和rose。这两个函数分别计算输入向量中数据落入某一范围的数量,而绘制的柱状高度或者长度则表示落入该范围的数据的个数。

  • hist
  • rose

4.离散数据图

绘制火柴杆图可以使用stem 函数或者stem3 函数,前者绘制二维空间的曲线,后者绘制三维空间的曲线,而阶梯图需要使用stairs 函数。

除了上述四种类型的特殊绘图函数以外,MATLAB 还能够绘制矢量方向图和等高线图,
这些函数包括:

  • compass :绘制放射线图。
  • feather:绘制线性放射线图。
  • quiver:绘制场图,绘制矢量场(带箭头方向).
  • quiver3:绘制三维场图。
  • contour:绘制等高线轮廓图。
  • contour3:绘制三维等高线轮廓图。
  • contourf:绘制填充的等高线图。
  • clabel:标识等高线标签。
  • meshc:绘制三维mesh 曲线和等高线。
  • surfc:绘制三维surf 曲线和等高线。

以下是干货(未完待续)

原理

matlab绘图分为figureaxis,object三级。
一个figure即为一个窗口,可以使用figure命令新建窗口。
一个figure中可以包含若干个axis,一般情况下只包含一个。而使用subplot时则包含多个axis。新建axis 可以使用命令axes。
分为绘图区,由属性Position确定;绘图区外面有显示坐标轴和文字的区域,大小由TightInset确定;此外,还允许有一定的margin,最终axis所占的位置及大小,由属性OuterPosition确定。也就是说,设置的postion属性应该满足在OuterPosition内。这些位置属性的单位由Units属性确定。

axes常用对象的属性

  • title(‘new’,’color’,’r’);给坐标轴命名为new,红色
  • title({‘this title’,’has 2 ‘});命名为两行的标题
  • grid on:在图像中显示网格
  • children:控制axes对象的子对象,即image\light\line\patch\rectangle\surface和text等对象,可通过get(gca,’children’)来返回当前坐标轴的子对象构成的句柄值向量
  • 字体属性
    • Fontangle字体角度(正常normal或斜体italic/oblique)
    • Fontname字体名称
    • fontsize字体大小(单位由Fontunits决定)
    • fontunits字体单位(points/normalized/inches/centimeters/pixels)
    • fontweight字体粗细(normal/bold/light/demi)
    • gridlinestyle决定坐标轴网格线的样式,‘-’为实线‘- -’为虚线‘:’为点线‘-.’为点虚线
    • e.g., plot(1:10);grid on;set(gca,’gridlinestyle’,’-.’);将当前坐标轴显示的网格线为点-虚线
  • linewidth 定义X,Y和Z轴的轴线宽度(以点单位定义)
  • NextPlot:有效值为add|replace|replacechildren,默认为replace。add表示使用当前的坐标轴,把新的图形对象加到此坐标轴中是一般保留的做法,replace表示重新设置坐标轴的所有属性(Position除外),也就是在绘图前会删除当前坐标轴和它的子对象。replacechildren表示移除当前坐标轴中所有子对象,但不重新设置坐标轴的所有属性
  • Outerposition决定坐标轴外边界的位置。由位置向量[left,bottom,width,height]组成,其中left,bottom表示相对于绘图窗口左下角的位置,width,height表示区域尺寸,默认为[0 0 1 1]
  • Position由位置向量[left,bottom,width,height]组成,决定坐标轴位置
  • Tag定义本坐标轴的卷展栏,因为每一个对象都有自己唯一的识别码即tag,以方便findobj函数查找坐标轴句柄值。
  • visible决定坐标轴是否可见
  • set(gca,’xgrid’,’on’)绘制X轴垂直网格线
    set(gca,’gridlinestyle’,’:’,’linewidth’,3)设置网格线线条类型和宽度
    set(gca,’box’,’on’)将图轴方框绘制出来
  • set(gca,’xscale’,’linear’);将X轴刻度设为线性;set(gca,’yscale’,’log’);将Y轴刻度设为对数
  • Xtick,Ytick,Ztick:控制X,Y,Z轴坐标刻度记号的位置,即控制坐标轴上刻度记号的位置以及每隔多少值会到下一个刻度记号的位置,同时还需要配合Xticklabel、Yticklabel、Zticklabel属性来调整。
    1
    2
    3
    4
    set(gca,'Xticklabel',{'1';'10';'100'})
    set(gca,'Xticklabel','1|10|100')
    set(gca,'Xticklabel',[1;10;100])
    set(gca,'Xticklabel',['1 ';'10 ';'100'])

常用控制属性

matlab单轴对象的常用控制属性

属性 含义
XLim,Ylim,ZLim 确定坐标轴范围
XLimMode,YLimMode,ZLimMode 决定坐标轴范围的模式(手动或matlab自动)
XTick,YTick,ZTick 确定坐标轴刻度位置
XTickMode,YTickMode,ZTickMode 决定坐标轴刻度位置的模式
XTickLabel, YTickLabel,ZTickLabel 确定轴刻度符号标记
XTickLabelMode,YTickLabelMode,YTickLabelMode 决定轴刻度符号标记的模式
XDir,YDir,ZDir 确定坐标轴方向

matlab的照相机属性

属性 含义
CameraPosition 照相机的位置:[x,y,z]
CameraPositionMode 照相机的位置的取值模式:[{auto}/manual]
CameraTarget 照相机的目标:[x,y,z]
CameraTargetMode 照相机的目标的取值模式:[{auto}/manual]
CameraUpVector 照相机的正位向量:[x,y,z]就是谁朝上的意思
CameraUpVectorMode 照相机的正位向量的取值模式:[{auto}/manual]
CameraViewAngle 照相机的视角:[0 180]
CameraViewAngleMode 照相机视角的取值模式:[{auto}/manual]
Projection 投影方式:[{orthographic}/perspective]

示例function 绘制条形图bar

个人最近使用的一个creatBar函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
% Create bar of production template
function [figure1]= createBar(data, xLabel, yLabel, Title)

figure1 = figure;

% Create axes
axes1 = axes(...
'CameraUpVector',[0 1 0],... %定义向上的方向, 指定为[x y z]形式的三元素方向向量
'FontName','Times New Roman',...
'FontSize',13,...
'FontWeight','demi',... %字体粗细(normal/bold/light/demi半粗体)
'Parent',figure1);
box('on'); % 设置值:on off是否显示绘图区的外框线
hold('all');

% Create bar
bar1 = bar(data,...
'BarLayout','stacked',...
'LineWidth',1);

% Create xlabel
xlabel(xLabel,...
'FontName','Times New Roman',...
'FontSize',13,...
'FontWeight','demi');

% Create ylabel
ylabel(yLabel,...
'FontName','Times New Roman',...
'FontSize',13,...
'FontWeight','demi');

title(Title,...
'FontName','Times New Roman',...
'FontSize',14,...
'FontWeight','bold');
end

《MATLAB基础与编程入门》
http://cn.mathworks.com/help/matlab/ref/matlab.graphics.axis.axes-properties.html?searchHighlight=CameraUpVector&s_tid=doc_srchtitle